package com.maikobi.maikobi.manager;

import com.maikobi.maikobi.common.ErrorCode;
import com.maikobi.maikobi.exception.BusinessException;
import com.yupi.yucongming.dev.client.YuCongMingClient;
import com.yupi.yucongming.dev.common.BaseResponse;
import com.yupi.yucongming.dev.model.DevChatRequest;
import com.yupi.yucongming.dev.model.DevChatResponse;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;

/**
 * AI 管理器
 *
 * 封装对接「鱼聪明智能 API 平台」的交互逻辑，用于统一处理 AI 聊天请求。
 * 依赖 YuCongMingClient 进行底层通信，支持指定模型 ID 和消息内容进行智能对话。
 *
 * 使用场景：调用智能模型（如推荐、问答、BI等）获取 AI 回复。
 *
 * 示例模型ID：
 * - 1736354020110856193L：歌曲推荐
 * - 1659171950288818178L：智能BI
 *
 * @author Maiko7
 * @create 2025-7-16 23:20
 */
@Service
public class AiManager {

    /**
     * 鱼聪明 API 客户端，通过自动注入方式获取
     * 需提前在配置类中注册 YuCongMingClient Bean
     */
    @Resource
    private YuCongMingClient yuCongMingClient;

    /**
     * 与 AI 模型进行对话
     *
     * @param modelId 模型 ID，用于指定调用哪个智能模型
     * @param message 用户输入的问题或指令
     * @return AI 回复的内容字符串
     * @throws BusinessException 若 AI 无响应或响应异常，抛出系统错误
     */
    public String doChat(long modelId, String message) {
        DevChatRequest devChatRequest = new DevChatRequest();
        devChatRequest.setModelId(modelId);
        devChatRequest.setMessage(message);

        BaseResponse<DevChatResponse> response = yuCongMingClient.doChat(devChatRequest);

        if (response == null || response.getData() == null) {
            throw new BusinessException(ErrorCode.SYSTEM_ERROR, "AI响应错误");
        }

        return response.getData().getContent();
    }
}
